package io.github.kimmking.javapuzzles;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;

/**
 * Description for this class.
 *
 * @Author : kimmking(kimmking@apache.org)
 * @create 2024/1/20 23:54
 */
public class JavaPuzzle8 {

    public static void main(String[] args) {

        // 1.
        DateFormat df = new SimpleDateFormat("YYYY-MM-dd");
        Date x = new Date();
        x.setYear(2023-1900);
        x.setMonth(11);
        x.setDate(31);
        System.out.println(df.format(x));

        x.setDate(30);
        System.out.println(df.format(x));


//        df = new SimpleDateFormat("uuuu-MM-dd");
//        x.setDate(31);
//        System.out.println(df.format(x));


//        // 2.
//        x.setYear(100);
//        DateFormat df1 = new SimpleDateFormat("uuuu-MM-dd G");
//        System.out.println(df1.format(x));
//        df1 = new SimpleDateFormat("yyyy-MM-dd G");
//        System.out.println(df1.format(x));

//
//        // 3.
//        x.setYear(-1900+1752);
//        x.setMonth(8);
//        x.setDate(1);
//        System.out.println(df.format(x));
//
//        x.setDate(2);
//        System.out.println(df.format(x));
//
//        x.setDate(3);
//        System.out.println(df.format(x));
//
//        x.setDate(8);
//        System.out.println(df.format(x));
//
//
//
//        x.setYear(-1900+1752);
//        x.setMonth(8);
//        x.setDate(1);
//        GregorianCalendar calendar = new GregorianCalendar();
//        calendar.setTime(x);
//        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
//        calendar.add(Calendar.DAY_OF_MONTH, 3);
//        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));


//        // 4. 不存在了
//        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        try {
//            System.out.println(sdf.parse("1986-05-04 00:30:00"));
//        } catch (ParseException e) {
//            throw new RuntimeException(e);
//        }
//
//        TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
//        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        try {
//            System.out.println(sdf1.parse("1986-05-04 00:30:00"));
//        } catch (ParseException e) {
//            throw new RuntimeException(e);
//        }

//        先了解一下夏令时
//
//        夏令时，表示为了节约能源，人为规定时间的意思。
//        一般在天亮早的夏季人为将时间调快一小时，可以使人早起早睡，减少照明量，以充分利用光照资源，从而节约照明用电。
//        各个采纳夏时制的国家具体规定不同。目前全世界有近110个国家每年要实行夏令时。
//        1986年4月，中国中央有关部门发出“在全国范围内实行夏时制的通知”，具体作法是：每年从四月中旬第一个星期日的凌晨2时整（北京时间），将时钟拨快一小时。(1992年起，夏令时暂停实行。)
//        夏时令这几个时间可以注意一下哈，1986-05-04, 1987-04-12, 1988-04-10, 1989-04-16, 1990-04-15, 1991-04-14.
//        结合demo代码，中国在1986-05-04当天还在使用夏令时，时间被拨快了1个小时。所以0点30分打印成了1点30分。如果要打印正确的时间，可以考虑修改时区为东8区。

    }
}
